#include <bits/stdc++.h>

using namespace std;

// 思路
// 前一个数的余数加上后一个数的余数，是否能够被k整除
// 前一个数的余数减去后一个数的余数，是否能够被k整除（为了避免负数取余的不同，可以将改为，前一个数的余数加后一个数的余数加k，再对k取余数）
// 将每一个余数都记录在一行当中
// 判断最后一行的第0项是否为true，如果为True，则输出YES，否则输出NO
// 最后一行的第0项如果为true，说明整个数组可以被k整除，否则不能被k整除
int main() {
    int n,k,x,i;
    cin >> n >> k;
    bool a[n][k] = {false};
    int data[n];

    // 计算第一个数除以k的余数
    cin >> data[0];

    // 将余数的对应位置标记为true;
    a[0][data[0]%k] = true;

    for(i = 1;i < n;i++) {
        cin >> data[i];

        // 遍历上一行的余数
        for(int j = 0;j < k;j++) {
            // 如果有余数，则加上余数进行运算
            if (a[i-1][j] == true) {
                a[i][(data[i] + j)%k] = true;
                a[i][(j + k-data[i] % k)%k] = true;
            }
        }
    }

    // 判断最后一行的第0项
    if (a[i-1][0]) {
        cout << "YES" << endl;
    }else {
        cout << "NO" << endl;
    }
}